package com.ruoyi.file.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.domain.BasePlusEntity;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serial;

/**
 * 存储配置对象 sys_storage_config
 *
 * @author ruoyi
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_storage_config")
@Schema(name = "SysStorageConfig", description = "存储配置对象")
public class SysStorageConfig extends BasePlusEntity {

    @Serial
    private static final long serialVersionUID = 1L;

    /** 配置ID */
    @Schema(description = "配置ID")
    @TableId(value = "config_id", type = IdType.AUTO)
    private Long configId;

    /** 配置名称 */
    @Schema(description = "配置名称")
    @NotBlank(message = "配置名称不能为空")
    @Size(max = 100, message = "配置名称长度不能超过100个字符")
    private String configName;

    /** 存储类型 */
    @Schema(description = "存储类型")
    @NotBlank(message = "存储类型不能为空")
    @Pattern(regexp = "^(local|minio|aliyun|tencent|aws)$", message = "存储类型只能是local、minio、aliyun、tencent、aws之一")
    private String storageType;

    /** 访问端点 */
    @Schema(description = "访问端点")
    @Size(max = 500, message = "访问端点长度不能超过500个字符")
    private String endpoint;

    /** 访问密钥 */
    @Schema(description = "访问密钥")
    @Size(max = 200, message = "访问密钥长度不能超过200个字符")
    private String accessKey;

    /** 秘密密钥 */
    @Schema(description = "秘密密钥")
    @Size(max = 500, message = "秘密密钥长度不能超过500个字符")
    private String secretKey;

    /** 存储桶名称 */
    @Schema(description = "存储桶名称")
    @NotBlank(message = "存储桶名称不能为空")
    @Size(max = 100, message = "存储桶名称长度不能超过100个字符")
    private String bucketName;

    /** 区域 */
    @Schema(description = "区域")
    @Size(max = 100, message = "区域长度不能超过100个字符")
    private String region;

    /** 自定义域名 */
    @Schema(description = "自定义域名")
    @Size(max = 500, message = "自定义域名长度不能超过500个字符")
    private String domain;

    /** 是否HTTPS */
    @Schema(description = "是否HTTPS(0否 1是)")
    private Integer isHttps;

    /** 状态 */
    @Schema(description = "状态(0停用 1启用)")
    private Integer status;

    /** 是否默认 */
    @Schema(description = "是否默认(0否 1是)")
    private Integer isDefault;

    /** 是否启用直传 */
    @Schema(description = "是否启用直传(0否 1是)")
    private Integer enableDirectUpload;

    /** 临时令牌过期时间 */
    @Schema(description = "临时令牌过期时间(秒)")
    @Min(value = 300, message = "临时令牌过期时间不能小于300秒")
    @Max(value = 86400, message = "临时令牌过期时间不能大于86400秒")
    private Integer tokenExpireTime;

    /** 单文件最大大小 */
    @Schema(description = "单文件最大大小(字节)")
    @Min(value = 1, message = "单文件最大大小必须大于0")
    private Long maxFileSize;

    /** 允许的文件类型 */
    @Schema(description = "允许的文件类型")
    @Size(max = 500, message = "允许的文件类型长度不能超过500个字符")
    private String allowedFileTypes;

    /** 排序 */
    @Schema(description = "排序")
    private Integer sortOrder;

    /** 扩展配置JSON */
    @Schema(description = "扩展配置JSON")
    private String configJson;
}
